#-------------------------------------------------------------------------------- #------------------Select The Model which should be parsed--------------------- #-------------------------------------------------------------------------------- CC "CoreUI" MODEL_SELECT_BOX title:"Select Modified Model" # --> RESULT endbutton:strValue [ modelids:idList | threadids:idList ] # [ mgroupids:idList ] [ appmodelids:idList ] [ extraValues ] SETG id_NewModelId:(VAL modelids) SETG str_endbutton:(endbutton) #-------------------------------------------------------------------------------- #------------------------Select The Model to compare with------------------------ #-------------------------------------------------------------------------------- CC "CoreUI" MODEL_SELECT_BOX title:"Select Original Model" # --> RESULT endbutton:strValue [ modelids:idList | threadids:idList ] # [ mgroupids:idList ] [ appmodelids:idList ] [ extraValues ] SETG id_OldModelId:(VAL modelids) SETG str_endbutton:(endbutton) IF (id_NewModelId = id_OldModelId) { CC "AdoScript" ERRORBOX "The Models are identical. \n Please Select two different Models!" EXIT } #-----------------------Cancel Button---------------------- IF (str_endbutton = "cancel") { # user pressed cancel-button EXIT } #-------------------------------------------------------------------------------- #------------------------GET ALL VISIBLE CLASSES IN THE MODEL-------------------- #-------------------------------------------------------------------------------- CC "Modeling" GET_VISIBLE_CLASSES modelid:(id_NewModelId) # --> RESULT ecode:intValue classids:strValue SETG n_ClassIds:(classids) #-------------------------------------------------------------------------------- #------------------------GET OBJECTS FOR ALL VISIBLE CLASSES--------------------- #-------------------------------------------------------------------------------- CC "Modeling" GET_VISIBLE_CLASSES modelid:(id_OldModelId) # --> RESULT ecode:intValue classids:strValue SETG n_OrigClassIds:(classids) FOR oclid in:(n_OrigClassIds) { CC "Core" GET_CLASS_NAME classid:(VAL oclid) #--> RESULT ecode:intValue classname:strValue isrel:intValue SETG id_OrigClassName:(classname) CC "Core" GET_ALL_OBJS_OF_CLASSNAME modelid:(id_OldModelId) classname:(id_OrigClassName) #-->RESULT ecode:intValue objids:list SETG id_OrigObjIds:(objids) FOR oobid in:(id_OrigObjIds) { SETG n_Oobjid:(VAL oobid) CC "Core" GET_OBJ_NAME objid:(n_Oobjid) #-->RESULT ecode:intValue objname:strValue SETL s_Oobjname:(objname) SETG aqlgetObjOldModel: ("({\"" + s_Oobjname + "\"})") CC "AQL" EVAL_AQL_EXPRESSION expr: (aqlgetObjOldModel) modelid:(id_NewModelId) # --> RESULT ecode: intValue objids: strValue SETL n_NObjId:(VAL objids) IF (n_NObjId = 0) { SAVE_DEL_OBJ_IN_RECORD #CC "AdoScript" INFOBOX ("The Object " + STR(n_Oobjid) + " is deleted" ) #CC "Modeling" SELECT objid:(n_Oobjid) } } } #---------------------------GET CLASS NAMES---------------------------------- FOR clid in:(n_ClassIds) { CC "Core" GET_CLASS_NAME classid:(VAL clid) #--> RESULT ecode:intValue classname:strValue isrel:intValue SETG id_NewClassName:(classname) #----------------------------GET OBJECT IDS-------------------------------------- CC "Core" GET_ALL_OBJS_OF_CLASSNAME modelid:(id_NewModelId) classname:(id_NewClassName) #-->RESULT ecode:intValue objids:list SETG id_NewObjIds:(objids) #-------------------------------------------------------------------------------- #-------------------------------GET ALL ATTRIBUTES------------------------------- #-------------------------------------------------------------------------------- CC "Core" GET_ALL_ATTRS classid:(VAL clid) with-cattrs #-->RESULT ecode:intValue attrids:strValue SETG s_AttrIds:(attrids) #-------------------------------------------------------------------------------- #----------------------QUERY NEW OBJECTS IN THE NEW MODEL------------------------ #-------------------------------------------------------------------------------- FOR obid in:(id_NewObjIds) { SETG n_Newobjid:(VAL obid) CC "Core" GET_OBJ_NAME objid:(n_Newobjid) #-->RESULT ecode:intValue objname:strValue SETG s_Newobjname:(objname) #---------------------Query the Object in the Old Model--------------------------- SETG aqlgetObjOldModel: ("({\"" + s_Newobjname + "\"})") CC "AQL" EVAL_AQL_EXPRESSION expr: (aqlgetObjOldModel) modelid:(id_OldModelId) # --> RESULT ecode: intValue objids: strValue SETG n_OldObjId:(VAL objids) #--------------------If the Object doesn't exists --> NEW OBJECT ------------------- IF (n_OldObjId = 0) { SAVE_NEW_OBJ_IN_RECORD #CC "AdoScript" INFOBOX ("The Object " + STR(n_Newobjid) + " is a new Object" ) #CC "Modeling" SELECT objid:(n_Newobjid) } #--------------------If the Object exists --> Compare All Notebook Attributes------------------- ELSE { #----------------------FOR EACH NOTEBOOK ATTRBUTE--------------------------- FOR atid in:(s_AttrIds) { #----------------------GET ATTRIBUTE NAME--------------------------- CC "Core" GET_ATTR_NAME attrid:(VAL atid) #-->RESULT ecode:intValue attrname:strValue SETG s_AttrName:(attrname) IF (s_AttrName = "Position") { CC "Core" GET_ATTR_VAL objid:(n_Newobjid) attrid:(VAL atid) SET val_AttrVal:(val) LEO parse: (val_AttrVal) get-tmm-value:n_x_val:"x" get-tmm-value:n_y_val:"y" CC "Core" GET_ATTR_VAL objid:(n_OldObjId) attrid:(VAL atid) #-->RESULT ecode:intValue val:anyValue SETG val_OldAttrVal: (val) LEO parse: (val_OldAttrVal) get-tmm-value:n_x_oldval:"x" get-tmm-value:n_y_oldval:"y" IF (n_x_oldval = n_x_val) { IF (n_y_oldval = n_y_val) { } } ELSE { SAVE_IN_RECORD } } ELSE { #--------------------------Differ Attribute Types and Trigger the PROCEDURES (see below): # COMPARE_ATTRIBUTES_STR and COMPARE_ATTRIBUTES_INT_REAL respectively---------------- CC "Core" GET_ATTR_TYPE attrid:(VAL atid) #-->RESULT ecode:intValue attrtype:strValue #INTEGER/DOUBLE/STRING/DISTRIBUTION/TIME/ENUMERATION/ENUMERATIONLIST/LONGSTRING/PROGRAMCALL/INTERREF/EXPRESSION/RECORD/ATTRPROFREF/DATE/DATETIME SETG n_AttrType:(attrtype) #-------------------------DATE----------------------------------- IF ((n_AttrType) = "DATE") { COMPARE_ATTRIBUTES_STR } #-------------------------DATETIME----------------------------------- IF ((n_AttrType) = "DATETIME") { COMPARE_ATTRIBUTES_STR } #-------------------------ENUMERATION----------------------------------- IF ((n_AttrType) = "ENUMERATION") { COMPARE_ATTRIBUTES_STR } #-------------------------ENUMERATIONLIST----------------------------------- IF ((n_AttrType) = "ENUMERATIONLIST") { COMPARE_ATTRIBUTES_STR } #-------------------------EXPRESSION----------------------------------- IF ((n_AttrType) = "EXPRESSION") { COMPARE_ATTRIBUTES_STR } #-------------------------DOUBLE----------------------------------- IF ((n_AttrType) = "DOUBLE") { COMPARE_ATTRIBUTES_INT_REAL } #-------------------------INTEGER----------------------------------- IF ((n_AttrType) = "INTEGER") { COMPARE_ATTRIBUTES_INT_REAL } #-------------------------INTERREF----------------------------------- IF ((n_AttrType) = "INTERREF") { CC "Core" GET_ATTR_VAL objid:(n_Newobjid) attrid:(VAL atid) #-->RESULT ecode:intValue val:anyValue SETG val_AttrVal: (val) CC "Core" GET_ATTR_VAL objid:(n_OldObjId) attrid:(VAL atid) #-->RESULT ecode:intValue val:anyValue SETG val_OldAttrVal: (val) IF (val_OldAttrVal != val_AttrVal) { CC "Core" GET_ATTR_VAL objid:(n_OldObjId) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_OldAttrVal:(val) SAVE_IN_RECORD } } #-------------------------STRING----------------------------------- IF ((n_AttrType) = "STRING") { COMPARE_ATTRIBUTES_STR } #-------------------------TIME----------------------------------- IF ((n_AttrType) = "TIME") { CC "Core" GET_ATTR_VAL objid:(n_Newobjid) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_AttrVal: (val) SETG s_AttrVal: (STR (val_AttrVal)) SETG aqlgetAttrOldModel: ("({\"" + s_Newobjname + "\":\"" + id_NewClassName + "\"}[?\"" + s_AttrName + "\" = \"" + s_AttrVal + "\"])") CC "AQL" EVAL_AQL_EXPRESSION expr: (aqlgetAttrOldModel) modelid:(id_OldModelId) # --> RESULT ecode: intValue objids: strValue SETG s_ComparisonObj: ( objids ) IF ( s_ComparisonObj = "") { CC "Core" GET_ATTR_VAL objid:(n_OldObjId) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_OldAttrVal:(val) SAVE_IN_RECORD } } } } } } } PROCEDURE SAVE_NEW_OBJ_IN_RECORD { CC "Core" GET_ATTR_ID classid: (id_NewModelId) attrname:("Object History") #-->RESULT ecode:intValue attrid:id SETG n_ObjRecAttrID: (attrid) CC "Core" ADD_REC_ROW objid:(id_NewModelId) attrid:(n_ObjRecAttrID) #-->RESULT ecode:intValue rowid:intValue SETG n_ObjRecRowId:(rowid) CC "Core" SET_ATTR_VAL objid: (n_ObjRecRowId) attrname:"Object" val: (s_Newobjname) #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_ObjRecRowId) attrname: "New" val:"x" #-->RESULT ecode:intValue } PROCEDURE SAVE_DEL_OBJ_IN_RECORD { CC "Core" GET_ATTR_ID classid: (id_NewModelId) attrname:("Object History") #-->RESULT ecode:intValue attrid:id SETG n_ObjRecAttrID: (attrid) CC "Core" ADD_REC_ROW objid:(id_NewModelId) attrid:(n_ObjRecAttrID) #-->RESULT ecode:intValue rowid:intValue SETG n_ObjRecRowId:(rowid) CC "Core" SET_ATTR_VAL objid: (n_ObjRecRowId) attrname:"Object" val: (s_Newobjname) #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_ObjRecRowId) attrname: "Deleted" val:"x" #-->RESULT ecode:intValue } #------------------------------------------------------------------------------ #---------------------Save Attribute Value Changes in Record Table------------- #------------------------------------------------------------------------------ PROCEDURE SAVE_IN_RECORD { CC "Core" GET_ATTR_ID classid: (id_NewModelId) attrname:("Changes") #-->RESULT ecode:intValue attrid:id SETG n_RecAttrID: (attrid) CC "Core" ADD_REC_ROW objid:(id_NewModelId) attrid:(n_RecAttrID) #-->RESULT ecode:intValue rowid:intValue SETG n_RecRowId:(rowid) CC "Application" GET_DATE_TIME date-format:"DD.MM.YYYY" time-format:"HH:MM:SS" #--> RESULT date:strValue #time:strValue SETG d_date:(date) SETG d_time:(time) CC "UserMgt" GET_USER_ID_OF_CURRENT_USER # --> RESULT ecode:intValue userid:intValue SETG n_Curr_UserId:(userid) CC "UserMgt" GET_USER_NAME userid:(n_Curr_UserId) # --> RESULT username:strValue ecode:intValue SETG s_Curr_UserName:(username) #CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"Date" val: (d_date + " " + d_time) CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"Attribute" val: (s_AttrName) #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"Old Value" val: (val_OldAttrVal) #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"New Value" val: (val_AttrVal) #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"Object" val: (s_Newobjname) #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"Accept Change" val: "No" #-->RESULT ecode:intValue CC "Core" SET_ATTR_VAL objid: (n_RecRowId) attrname:"Class" val:(VAL clid) #-->RESULT ecode:intValue CC "Core" GET_ATTR_ID classid: (VAL clid) attrname:("ChangeGraph") #-->RESULT ecode:intValue attrid:id CC "Core" GET_ATTR_VAL objid: (VAL obid) attrname:"ChangeGraph" #-->RESULT ecode:intValue val:anyValue CC "Core" SET_ATTR_VAL objid: (VAL obid) attrname:"ChangeGraph" val:((val) + 1) #-->RESULT ecode:intValue } #------------------------------------------------------------------------------ #---------------------Check Attribute Values for Changes----------------------- #------------------------------------------------------------------------------ # Used for the attribute types: DATE/DATETIME/ENUMERATION/ENUMERATIONLIST/STRING PROCEDURE COMPARE_ATTRIBUTES_STR { CC "Core" GET_ATTR_VAL objid:(n_Newobjid) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_AttrVal: (val) SET aqlgetAttrOldModel: ("({\"" + s_Newobjname + "\":\"" + id_NewClassName + "\"}[?\"" + s_AttrName + "\" = \"" + val_AttrVal + "\"])") CC "AQL" EVAL_AQL_EXPRESSION expr: (aqlgetAttrOldModel) modelid:(id_OldModelId) # --> RESULT ecode: intValue objids: strValue SET s_ComparisonObj: ( objids ) #CC "AdoScript" INFOBOX (s_ComparisonObj) IF ( s_ComparisonObj = "") { CC "Core" GET_ATTR_VAL objid:(n_OldObjId) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_OldAttrVal:(val) #CC "AdoScript" INFOBOX ("The attribute " + (s_AttrName) + " of the object " + (s_Newobjname) + " has been changed from " + (val_OldAttrVal) + " to " + (val_AttrVal)) SAVE_IN_RECORD } } # Used for the attribuet types:INTEGER/DOUBLE PROCEDURE COMPARE_ATTRIBUTES_INT_REAL { CC "Core" GET_ATTR_VAL objid:(n_Newobjid) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_AttrVal: (val) SETG s_AttrVal: (STR (val_AttrVal)) SETG aqlgetAttrOldModel: ("{\"" + s_Newobjname + "\":\"" + id_NewClassName + "\"}[?\"" + s_AttrName + "\" =" + s_AttrVal + "]") #CC "AdoScript" INFOBOX (aqlgetAttrOldModel) CC "AQL" EVAL_AQL_EXPRESSION expr: (aqlgetAttrOldModel) modelid:(id_OldModelId) # --> RESULT ecode: intValue objids: strValue SETG s_ComparisonObj: ( objids ) #CC "AdoScript" INFOBOX (s_ComparisonObj) IF ( s_ComparisonObj = "") { CC "Core" GET_ATTR_VAL objid:(n_OldObjId) attrname:(s_AttrName) #-->RESULT ecode:intValue val:anyValue SETG val_OldAttrVal:(val) SAVE_IN_RECORD #CC "AdoScript" INFOBOX ("The attribute " + (s_AttrName) + " of the object " + (s_Newobjname) + " has been changed from " + STR(val_OldAttrVal) + " to " + STR(val_AttrVal)) } }